package edu.utn.tacs.grupouno.negocio;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import edu.utn.tacs.grupouno.negocio.Dia.DiaDeLaSemana;

public class DiaFactoryMock extends AbstractDiaFactory {

	private Set<TurnoSemanal> turnosSemanales;
	private Map<Date,List<Turno>> turnosAsignados;
	
	public DiaFactoryMock() {
		turnosSemanales = new HashSet<TurnoSemanal>();
		turnosAsignados = new HashMap<Date, List<Turno>>();
	}
	
	public void addTurnoSemanal(TurnoSemanal turnoSemanal) {
		turnosSemanales.add(turnoSemanal);
	}
	
	protected List<Turno> getTurnosAsignados(Date fecha) {
		return turnosAsignados.get(fecha);
	}
	
	protected void completarTurnosDisponibles(Dia dia) {
		DiaDeLaSemana dsem = DiaDeLaSemana.get(dia.getFecha());
		List<Turno> turnos = dia.getTurnos();
		for(TurnoSemanal tsem : turnosSemanales) {
			if(tsem.getDiaDeLaSemana().equals(dsem) &&
					tsem.getFechaInicio().before(dia.getFecha())) {
				Turno turnoExistente = dia.getTurno(tsem.getHorario());
				if(turnoExistente == null) {
					turnos.add(new Turno(tsem));
				} else if(turnoExistente.isDisponible() &&
						turnoExistente.getTurnoSemanal().getFechaInicio().before(tsem.getFechaInicio())) {
					turnos.remove(turnoExistente);
					turnos.add(new Turno(tsem));
				}
			}
		}
	}
	
	public void setTurnoEnDia(Date date, Turno turno) {
		Date fecha = limpiarFecha(date);
		List<Turno> lista = getTurnosAsignados(fecha);
		if(lista == null) {
			lista = new ArrayList<Turno>();
		}
		lista.add(turno);
		turnosAsignados.put(fecha, lista);
	}
	
}
